package pe.edu.upc.dew.grupo7.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;

import pe.edu.upc.dew.grupo7.model.Boleto;
import pe.edu.upc.dew.grupo7.model.Funcion;
import pe.edu.upc.dew.grupo7.model.Horario;
import pe.edu.upc.dew.grupo7.model.Pelicula;
import pe.edu.upc.dew.grupo7.model.Sala;

public class FuncionDaoJdbc extends SimpleJdbcDaoSupport implements FuncionDao {
	FuncionDao funcionDao;

	public Funcion getFuncionPorCodigo(String codigofuncion) {
		return getSimpleJdbcTemplate()
				.queryForObject(
						"select codigofuncion,idSala,codigoPelicula,codigoHorario from Funcion where codigofuncion=?",
						new FuncionMapper(),
						codigofuncion);
	}

	public void insert(Funcion funcion) {
		getSimpleJdbcTemplate()
				.update("insert into funcion(codigoFuncion,idSala,codigoPelicula,codigoHorario) values(?,?,?,?)",
						funcion.getCodigofuncion(),
						funcion.getSala().getIdSala(),
						funcion.getPelicula().getCodigoPelicula(),
						funcion.getHorario().getCodHorario());
	}

	public void deleteFuncionPorCodigo(String codigofuncion) {
		getSimpleJdbcTemplate().update(
				"delete from funcion where codigofuncion=?", codigofuncion);
	}

	public void updatePorCodigo(String codigoFuncion) {

		Funcion funcion = funcionDao.getFuncionPorCodigo(codigoFuncion);
		getSimpleJdbcTemplate()
				.update("update funcion set codigoHorario=?,idSala=?,codigoPelicula=? where codigofuncion=?",
						funcion.getHorario().getCodHorario(),
						funcion.getSala().getIdSala(),
						funcion.getPelicula().getCodigoPelicula(),
						funcion.getCodigofuncion());
	}

	public List<Funcion> getFuncionesPorSala( String idSala) {
		return getSimpleJdbcTemplate()
				.query("select codigofuncion,idSala,codigoPelicula,codigoHorario from funcion where idSala = ?",
						new FuncionMapper(), idSala);

	}

	public void updatePorCodigo(Funcion funcion) {
		// TODO Auto-generated method stub

	}
	public class FuncionMapper implements RowMapper<Funcion> {
		public Funcion mapRow(ResultSet rs, int rowNumber) throws SQLException {
			Funcion funcion = new Funcion();
			funcion.setCodigofuncion(rs.getString("codigoFuncion"));
			Horario horario=new Horario();
			horario.setCodHorario(rs.getString("codigoHorario"));
			funcion.setHorario(horario);
			Pelicula pelicula= new Pelicula();
			pelicula.setCodigoPelicula(rs.getString("codigoPelicula"));
			funcion.setPelicula(pelicula);
			Sala sala= new Sala();
			sala.setIdSala(rs.getString("idSala"));
			funcion.setSala(sala);
			funcion.setCodigofuncion(rs.getString("codigoFuncion"));
			
			return funcion;
		}
	}
	public List<Funcion> getFunciones() {
		return getSimpleJdbcTemplate()
		.query("select codigofuncion,idSala,codigoPelicula,codigoHorario from funcion ",
				new FuncionMapper());
	}

}
